package web.java.z_Utils;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

public class WebUtil {
	/**
	 * 使用BeanUtils组件批量封装页面参数到实体类对象中
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws InvocationTargetException 
	 * */
	/*
	 * 接收两个参数，返回一个枚举类型的对象
	 * 1、request 	用来获取页面用户输入的数据
	 * 2、clazz		接收一个对象类，可以实例出对象，减少了在Servlet中new对象的步骤，直接传入类即可
	 * */
	public static <T> T encapsulate(HttpServletRequest request, Class<T> clazz){
		
		T t=null;
		try{
			//1、实例一个对象
			t=clazz.newInstance();
			/*
			 * 2、获取到所有的表单数据	
			 * request.getParameterNames(); 获取到所有的表单名，返回一个Enumeration类的集合
			 * */
			Enumeration<String> enames=request.getParameterNames();
			//2.1 循环得到所有的表单数据，并写入对象中
			while(enames.hasMoreElements()){
				String username=enames.nextElement();	//返回一个表单名称
				String value=request.getParameter(username);	//通过表单名称得到表单数据
				System.out.println("webutil:"+username+"="+value);
				//2.2 封装入对象
				BeanUtils.copyProperty(t,username,value);
			}
		}catch(Exception e){
			throw new RuntimeException(e);
		}
		//返回对象
		return t;
	}
}
